package Java2XSB;

import java.sql.*;
import java.text.*;
import it.cnr.icib.XSBProlog.XSBProlog;

/**
 * La classe <i>Evento</i> contiene le informazioni relative ad un evento
 * culturale.<br />
 * Contiene informazioni sulla posizione specificando il sito dove si verifica,
 * sul perido di inizio e di fine,
 * 
 * @author Antonio Sorgente
 * @version 1.0
 * @since ottobre 2012
 * @see Elem
 * @see EnvironmentXSB
 */
public class Evento implements Elem{

  private int idEvento;
  private String Nome;
  private Date dataInizio;
  private Date dataFine;
  private int idSito;  //Sito dove si verifica l'evento
  private String  nomeSito;  //Sito dove si verifica l'evento
  XSBProlog prolog;



  public Evento(XSBProlog prolog) {
    this(prolog,0,null,null,null,0);
  }


  public Evento( XSBProlog prolog, int pIdEvento, String pNome, Date pDataInizio, Date pDataFine, int pIdSito)
 {
	  this.prolog=prolog;
   idEvento=pIdEvento;
   Nome=pNome;
   dataInizio=pDataInizio;
   dataFine=pDataFine;
   idSito=pIdSito;

   if (idSito!=0)
     nomeSito=loadSito(idSito);
   else
     nomeSito="";


 }

  private String loadSito(int idSito) {

    Object[][] val=prolog.NonDeterministicGoal("siti("+idSito+",N,_,_,_,_,_,_)","N","");
    if (val.length>0)
      return val[0][0].toString();
    else
      return "";
  }

  public void setNewEvento(int pIdEvento, String pNome, Date pDataInizio, Date pDataFine, int pIdSito){
   idEvento=pIdEvento;
   Nome=pNome;
   dataInizio=pDataInizio;
   dataFine=pDataFine;
   idSito=pIdSito;

   if (idSito!=0)
     nomeSito=loadSito(idSito);
   else
     nomeSito="";

 }

 public void setIdEvento(int pIdEvento){
   idEvento=pIdEvento;
 }

 public void setNome( String pNome){
   Nome=pNome;
 }

 public void setDataInizio(Date pDataInizio){
   dataInizio=pDataInizio;
 }
 public void setDataFine( Date pDataFine){
   dataFine=pDataFine;
 }
 public void setIdSito(int pIdSito){
    idSito=pIdSito;
    if (idSito!=0)
      nomeSito=loadSito(idSito);
    else
      nomeSito="";

 }



 public int getIdEvento(){
   return idEvento;
 }

 public String getNome(){
   return Nome;
 }

 public Date getDataInizio(){
   return dataInizio;
 }
 public Date getDataFine(){
   return dataFine;
 }

 public int getIdSito(){
   return idSito;
 }

 public String getNomeSito(){
   return nomeSito;
 }

  public String QueryToAddToDataBase() {
    String stringDate = "1900-01-01";    //Data di riferimento 0
    String stringFormat = "yyyy-MM-dd"; //Fai attenzione a maiuscole e minuscole
    DateFormat format = new SimpleDateFormat(stringFormat);
    java.sql.Date dateRif = null;
    java.util.Date date = null;


     try {
       date = format.parse(stringDate);
       dateRif=new Date(date.getTime());
     }
     catch (ParseException ex) {
     }

     long val=86400000; //Differenza tra due giorni consecutivi
     long rif=dateRif.getTime();
     long lDataInizio=(dataInizio.getTime()-rif)/val +2;
     long lDataFine=(dataFine.getTime()-rif)/val+2;


    return "ins_eventi("+idEvento+",'"+Nome+"',"+lDataInizio+","+lDataFine+","+idSito+")";
  }

  public String QueryToRemoveFromDataBase() {
    return "del_eventi("+idEvento+")";
  }


  public int getId() {
    return idEvento;
  }

  public void stampa() {
    System.out.println(idEvento +"  "+Nome +"  "+dataInizio+"  "+dataFine+"   "+idSito);
  }


  public String toString2() {
     return idEvento +"  "+Nome +"  "+dataInizio+"  "+dataFine+"   "+idSito;
   }

   public String toString() {
      return "-" +Nome +" dal "+dataInizio+" al "+dataFine+" nel sito "+nomeSito;
    }







  public static void main(String[] args) {
    Evento e1 = new Evento(null,1,"Pippo",null,null,1);
    Evento e2 = new Evento(null,1,"Pluto",null,null,1);


  }

  public int getIdRelazione() {
    return idSito;
  }

}
